﻿using DoxygenBrowserAddin.Controller;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;
using System.IO;
using DoxygenBrowserAddin.Utils;
using EnvDTE;
namespace TestDoxTokenParser
{
    
    
    /// <summary>
    ///This is a test class for TokenDictionaryLoaderTest and is intended
    ///to contain all TokenDictionaryLoaderTest Unit Tests
    ///</summary>
  [TestClass()]
  public class TokenDictionaryLoaderTest
  {


    private TestContext testContextInstance;

    /// <summary>
    ///Gets or sets the test context which provides
    ///information about and functionality for the current test run.
    ///</summary>
    public TestContext TestContext
    {
      get
      {
        return testContextInstance;
      }
      set
      {
        testContextInstance = value;
      }
    }

    #region Additional test attributes
    // 
    //You can use the following additional attributes as you write your tests:
    //
    //Use ClassInitialize to run code before running the first test in the class
    //[ClassInitialize()]
    //public static void MyClassInitialize(TestContext testContext)
    //{
    //}
    //
    //Use ClassCleanup to run code after all tests in a class have run
    //[ClassCleanup()]
    //public static void MyClassCleanup()
    //{
    //}
    //
    //Use TestInitialize to run code before running each test
    //[TestInitialize()]
    //public void MyTestInitialize()
    //{
    //}
    //
    //Use TestCleanup to run code after each test has run
    //[TestCleanup()]
    //public void MyTestCleanup()
    //{
    //}
    //
    #endregion


    /// <summary>
    /// Processes the types of token test.
    /// </summary>
    [TestMethod()]
    [DeploymentItem(@"Resources\TypesOfToken.xml")]
    public void ProcessTypesOfTokenTest()
    {
      string strTokenFilePath = "TypesOfToken.xml";
      TokenDictionaryLoader target  = processFile(strTokenFilePath);
      Assert.IsTrue(target.TokenDictionary.NumEntries == 11);
    }

    /// <summary>
    /// Processes file with missing token test.
    /// </summary>
    [TestMethod()]
    [DeploymentItem(@"Resources\MissingTokens.xml")]
    public void ProcessMissingTokensTest()
    {
      string strTokenFilePath = "MissingTokens.xml"; 
      TokenDictionaryLoader target = processFile(strTokenFilePath);
      Assert.IsTrue(target.TokenDictionary.NumEntries == 1);
    }

    private TokenDictionaryLoader processFile(string strTokenFilePath)
    {
      TokenDictionaryLoader loader;
      try
      {
        loader = new TokenDictionaryLoader(strTokenFilePath);
        loader.Process();
        Assert.IsNotNull(loader.TokenDictionary);
      }
      catch (Exception ex)
      {
        string strCurrentDirectory = Directory.GetCurrentDirectory();
        Console.WriteLine(strCurrentDirectory);
        Console.WriteLine(ex.Message);
        throw;
      }
      return loader;
    }
  }
}
